/*
给你二叉树的根结点 root ，请你将它展开为一个单链表：

展开后的单链表应该同样使用 TreeNode ，其中 right 子指针指向链表中下一个结点，而左子指针始终为 null 。
展开后的单链表应该与二叉树 先序遍历(前序遍历) 顺序相同。
*/
#include <vector>

using namespace std;

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) {}
};

class Solution {
public:
    void preorder(TreeNode* root, vector<TreeNode*>& res) {
        if (root == nullptr) {
            return;
        }
        res.push_back(root);
        preorder(root->left, res);
        preorder(root->right, res);
    }

    void flatten(TreeNode* root) {
        vector<TreeNode*> res;
        preorder(root, res);

        int size = res.size();
        for (int i = 0; i < size; i++) {
            TreeNode* node = res[i];
            node->left = nullptr;
            if (i < size - 1) {
                node->right = res[i + 1];
            } else {
                node->right = nullptr;
            }
        }
    }
};

int main() {
    return 0;
}